<?php

class ModifierSeanceAction extends Action{
	
	function execute( HttpRequest $request ){
			
				
		$DAOfactory=AbstractDAOFactory::getDaoFactory(AbstractDAOFactory::MYSQL);
		$seanceDAO=$DAOfactory->getSeanceDAO();
		$filmDAO=$DAOfactory->getFilmDAO();
		$salleDAO=$DAOfactory->getSalleDAO();
		$param=array('dateseance', 'heureseance');
	    $resultat=$this->isFieldsFilled($param,$request);
	
		if ($resultat==true){
			
			$seance=new Seance();
			$salle=new Salle();
			//on recupere les parametre du formulaire et on hydrate notre objet seance
			$seance->setId($request->getParameter('idseance'));
			$seance->setDateSeance($request->getParameter('dateseance'));
			$seance->setHeureSeance($request->getParameter('heureseance'));
			//on charge le film de la seance
			$filmTab=$filmDAO->getById($request->getParameter('idfilm'));
			$film=$filmTab[0];
			//on charge  les donnés de la salles actuellement en base via la seance pou recuperer le nb places de la salle avant l'upate
			$ancienneseanceTab=$seanceDAO->getByID($request->getParameter('idseance'));
			$anciennesalle=$ancienneseanceTab[0]->getSalle();
			//on calcul le nombre de places qui ont été réservées jusqu'a present
			$nbplacesreserve=$anciennesalle->getNbPlacesSalle()- $ancienneseanceTab[0]->getNbPlacesDispo();
			
			//on charge la nouvelle salle
			$salleTab=$salleDAO->getById($request->getParameter('idsalle'));
			$salle=$salleTab[0];
			//On ne peut changer la salle que si le nombre de places reserves est inferieur a la contenance de la nouvelle salle
			if(($salle->getNbPlacesSalle()-$nbplacesreserve)>0){
			
			//si c'est bon on change le nombre de places dispo et on update la seance
				$seance->setNbPlacesDispo($salle->getNbPlacesSalle()-$nbplacesreserve);
				$seance->setFilm($film);
				$seance->setSalle($salle);
				$seanceDAO->update($seance);
				$listeSeances=$seanceDAO->getSeancesByFilmId($film->getId());
				$request->addObject('film',$film);
				$request->addObject('listeSeances',$listeSeances);
				return self::ACTION_OK;
			 }
			 else {
				//on recupere les anciens parametres et on affiche le message d'erreur
				$seance=new Seance();
				$seanceTab=$seanceDAO->getById($request->getParameter('idseance'));
				$seance=$seanceTab[0];
				$listeSalles=$salleDAO->getAll();
				$request->addObject('listeSalles',$listeSalles);
				$request->addObject('seance',$seance);
				$request->addMessage('Impossible de changer le salle car le nombre de places actuellement reserves est > a la contenance de la salle selectionne');
				return self::ACTION_KO;
			 
			 }
		}
		else{
				//on recupere les anciens parametres et on affiche le message d'erreur
			$seance=new Seance();
			$seanceTab=$seanceDAO->getById($request->getParameter('idseance'));
			$seance=$seanceTab[0];
			$listeSalles=$salleDAO->getAll();
			$request->addObject('listeSalles',$listeSalles);
			$request->addObject('seance',$seance);
			$request->addMessage('Tout les champ ne sont pas correctement saisis');
			return self::ACTION_KO;
		}
		

	   
		
	}
	
	function isFieldsFilled(Array $param,$request){
		//on fait une simple verif de la présence des données coté serveur au cas ou l'utilisateur aurait
		//désactivé le javscript l'essentiel des controles etant realise cote client
		$retour=true;
		foreach($param as $cle=>$valeur){
			if ($request->getParameter($valeur)==""){
				$retour=false;
			}
		}
		return $retour;
	}
		
	

	
}